import dayjs from 'dayjs';

export const isFalsy = (value: any) => (value === 0 ? false : !value);

const failReasonEnum = {
	canceled: '访客取消呼叫',
	notfound: '未找到坐席',
	timeout: ' 呼叫超时',
	offday: '不在工作日',
	offtime: '不在工作时间',
	scenariodisabled: '业务场景未启用',
	otherCustomerAccept: '其他坐席已经接听',
	multiCustomerForbidAI: '指定机器人呼叫时会话中存在多访客',
	rejected: '坐席拒绝',
	ringingTimeout: '振铃超时',
	customerRolesEmpty: '访客角色为空',
	scenarioRolesEmpty: '呼叫的业务场景角色为空',
	scenarioRolesNotMatched: '业务场景角色不匹配',
	ban: '命中黑名单'
};

/**
 * 清除 undefined 属性
 * @param {*} params
 * @returns
 */
export const cleanParams = (params: object) => {
	const result = { ...params };
	Object.keys(result).forEach(key => {
		const value = result[key];
		if (isFalsy(value)) {
			delete result[key];
		}
		if (typeof result[key] === 'string') {
			result[key] = result[key].trim();
		}
	});

	return result;
};

export const filterRecordList = (data: any[]) => {
	if (data.length === 0) return data;
	const utc = require('dayjs/plugin/utc');
	dayjs.extend(utc);
	return data.map(item => {
		return {
			sn: item.sn || '--',
			openId: item.openId || '--',
			sessionId: item.sessionId || '--',
			scenarioName: item.scenarioName || '--',
			failReason: item.failReason && failReasonEnum[item.failReason] ? failReasonEnum[item.failReason] : '--',
			ringAt: item.ringAt ? dayjs(item.ringAt).format('YYYY-MM-DD HH:mm:ss') : '--',
			orderId: item.orderId || '--', // 工单号
			phone: item.phone || '--', // 用户手机号
			suggestion: item.suggestion || '--', // 评价留言
			createdAt: item.createdAt ? dayjs(item.createdAt).format('YYYY-MM-DD HH:mm:ss') : '--',
			sessionStartAt: item.acceptedAt ? dayjs(item.acceptedAt).format('YYYY-MM-DD HH:mm:ss') : '--',
			sessionEndAt: item.closedAt ? dayjs(item.closedAt).format('YYYY-MM-DD HH:mm:ss') : '--',
			waitTime: item.acceptedAt ? subtractTime(item.acceptedAt, item.createdAt, 'second') : '--',
			totalTime: item.closedAt && item.acceptedAt ? dayjs(dayjs(item.closedAt).diff(item.acceptedAt)).utc().format('HH:mm:ss') : '--',
			isAccepted: item.status === 'accepted' ? 'yes' : 'no',
			queneAt: item.ringAt ? subtractTime(item.ringAt, item.createdAt, 'second') : subtractTime(item.closedAt, item.createdAt, 'second'),
			ringTotalTime: item.acceptedAt ? subtractTime(item.acceptedAt, item.ringAt, 'second') : subtractTime(item.closedAt, item.ringAt, 'second'),
			score: getChinseScore(item.score),
			PRODUCT_ID: item.PRODUCT_ID || '--', // 设备号
			PROD_MODEL: item.PROD_MODEL || '--', // 机型
			OBJECT_ID: item.OBJECT_ID || '--', // 受理单号
			ZSLD_TEXT: item.ZSLD_TEXT || '--', // 工单状态
			ACTIVE_ID: item.ACTIVE_ID || '--', // 服务单号
			ZACT_TEXT: item.ZACT_TEXT || '--', // 工单状态
			agentName: item.agentName || '--', // 工程师ID，客服工号
			ZGCS_NAME: item.ZGCS_NAME || '--', // 工程师名字
			ZGCS_TEL: item.ZGCS_TEL || '--', // 工程师手机号
			ZYYSM_DATE: item.ZYYSM_DATE || '--', // 预约上门时间
			ZPG_DATE: item.ZPG_DATE || '--', // 已派工时间
			ZYY_DATE: item.ZYY_DATE || '--', // 已预约时间
			ZXCFW_BEGIN_DATE: item.ZXCFW_BEGIN_DATE || '--', // 现场服务开始时间
			ZWGQR_DATE: item.ZWGQR_DATE || '--', // 完工确认时间
			ZLXR_NAME: item.ZLXR_NAME || '--', // 客户名
			ZKH_NAME: item.ZKH_NAME || '--', //
			SALES_OFFICE_DESC: item.SALES_OFFICE_DESC || '--'
		};
	});
};

const subtractTime = (startTime: any, endTime: any, unit: 'second' | 'minute' | 'hour' | 'millisecond'): string => {
	let str = '--';
	if (startTime && endTime) {
		str = dayjs(dayjs(startTime).diff(endTime)).format('mm:ss');
	}
	return str;
};

const getChinsesUnit = (unit: 'second' | 'minute' | 'hour' | 'millisecond') => {
	let str = '';
	switch (unit) {
		case 'second':
			str = '秒';
			break;
		case 'minute':
			str = '分';
			break;
		case 'hour':
			str = '时';
			break;
		case 'millisecond':
			str = '毫秒';
			break;
		default:
			break;
	}
	return str;
};

const getChinseScore = (score: number): string => {
	let str = '';
	switch (score) {
		case 5:
			str = '非常满意';
			break;
		case 4:
			str = '满意';
			break;
		case 3:
			str = '一般';
			break;
		case 2:
			str = '不满意';
			break;
		case 1:
			str = '非常不满意';
			break;
		default:
			str = '--';
			break;
	}
	return str;
};

export const filterTips = (tips: string) => {
	const reg = /[0-9]{4}-[0-9]{2}-[0-9]{2} +[0-9]{2}:[0-9]{2}:[0-9]{2} :/g;
	let matchs = tips.match(reg);
	matchs?.forEach((item, index) => {
		if (tips.includes(item) && index > 0) {
			tips = tips.replace(item, '\r\n' + item);
		}
	});
	console.log('filterTips:', tips);
	return tips;
};
